package espace_physique;

import fichiers.AdapteurGestionFichierListe;
import fichiers.MyDefaultListCellRender;
import fichiers.AdapteurGestionFichierArbre;
import fichiers.Element;
import fichiers.MyDefaultMutableTreeNode;
import fichiers.RacineDossier;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.plaf.metal.MetalBorders.*;
import javax.swing.tree.*;
import support.ModelInterface;


public class VueEspaceDossier {
    
    
    private JDialog dialogue;
    private JTree arbre;
    private AdapteurGestionFichierArbre modelArbre;
    private AdapteurGestionFichierListe modelListe;
    private JList liste;
    
    
    public VueEspaceDossier(JFrame parent) {
        
        //INITIALISATION DE LA FENETRE DE DIALOGUE
        this.dialogue = new JDialog(parent,"Gestion des dossiers à scanner",true);
        this.dialogue.setVisible(false);
        this.dialogue.setSize(570,480);
        this.dialogue.setResizable(false);
        this.dialogue.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
        
        //INITIALISATION DES CHAMPS
        this.modelArbre=new AdapteurGestionFichierArbre(RacineDossier.getRacine());
        SousVueEspaceDossierRadio vradio=new SousVueEspaceDossierRadio();
        this.modelListe=new AdapteurGestionFichierListe(RacineDossier.getRacine().getGestionnaire());
        //CREATION DU CONTENEUR
        Container contenu=dialogue.getContentPane();
        contenu.setLayout(new BorderLayout());
        contenu.add(Box.createHorizontalStrut(10),BorderLayout.EAST);
        contenu.add(Box.createHorizontalStrut(10),BorderLayout.WEST);
        contenu.add(Box.createVerticalStrut(15),BorderLayout.SOUTH);
        contenu.add(Box.createVerticalStrut(10),BorderLayout.NORTH);
        
        //CREATION DU JPANEL PRINCIPAL
        JPanel principal=new JPanel();
        contenu.add(principal,BorderLayout.CENTER);
        
        
        //creation de la partie de gauche
        JPanel principalGauche = new JPanel(new BorderLayout());
        this.arbre=new JTree(this.modelArbre);
        TreeCellRenderer formateurArbre=new MyIconeTypeCellRenderer(new MyDefaultTreeCellRendererPicasial(new DefaultTreeCellRenderer()));
        arbre.setCellRenderer(formateurArbre);
        // this.arbre.setBackground(Color.WHITE);
        this.arbre.addTreeSelectionListener(new ControleurArbreSelection(this.arbre,vradio));
        JScrollPane scroll=new JScrollPane(arbre);
        scroll.setBorder(new ScrollPaneBorder());
        Border empty = BorderFactory.createEmptyBorder();
        JPanel tourScroll = new JPanel(new BorderLayout()) {
            
            private Dimension dim = new Dimension(260,400);
            
            public Dimension getSize() {
                return dim;
            }
            public Dimension getPreferredSize() {
                return dim;
            }
            public Dimension getMaximumSize() {
                return dim;
            }
            public Dimension getMinimumSize() {
                return dim;
            }
        };
        
        tourScroll.add(Box.createVerticalStrut(40),BorderLayout.SOUTH);
        tourScroll.add(scroll,BorderLayout.CENTER);
        tourScroll.setBorder(BorderFactory.createTitledBorder(empty, "Liste des dossiers"));
        principalGauche.add(tourScroll,BorderLayout.CENTER);
        
        principal.add(principalGauche,BorderLayout.WEST);
        
        //CREATION DE LA PARTIE DROITE
        JPanel principalDroit=new JPanel(new FlowLayout()) {
            
            private Dimension dim = new Dimension(260,430);
            
            public Dimension getSize() {
                return dim;
            }
            public Dimension getPreferredSize() {
                return dim;
            }
            public Dimension getMaximumSize() {
                return dim;
            }
            public Dimension getMinimumSize() {
                return dim;
            }
        };
        

        JPanel descr=new JPanel(new BorderLayout()) {
            
            private Dimension dim = new Dimension(260,85);
            
            public Dimension getSize() {
                return dim;
            }
            public Dimension getPreferredSize() {
                return dim;
            }
            public Dimension getMaximumSize() {
                return dim;
            }
            public Dimension getMinimumSize() {
                return dim;
            }
        };
        JTextArea description=new JTextArea(1,3);
        description.setFont(new Font("Times New Roman (TrueType)",Font.ROMAN_BASELINE,11));
        description.setText("\nPour chacun des dossiers, vous pouvez indiquer " +
                "si vous souhaitez que Picasial recherche les photos disponibles" +
                " et les surveille en permanence en cas d'ajout de nouvelles " +
                "photos.");
        description.setWrapStyleWord(true);
        description.setBackground(principal.getBackground());
        description.setEditable(false);
        description.setLineWrap(true);
        
        descr.add(description);
        principalDroit.add(descr);
        principalDroit.add(vradio);

        
        this.liste=new JList(modelListe);
        liste.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        ListCellRenderer presListe=new MyDefaultListCellRender(new DefaultListCellRenderer());
        liste.setCellRenderer(presListe);
        
        JScrollPane scroll2=new JScrollPane(liste);
        scroll2.setBorder(new ScrollPaneBorder());
        JPanel tourScroll2 = new JPanel(new BorderLayout()) {
            
            private Dimension dim = new Dimension(260,185);
            
            public Dimension getSize() {
                return dim;
            }
            public Dimension getPreferredSize() {
                return dim;
            }
            public Dimension getMaximumSize() {
                return dim;
            }
            public Dimension getMinimumSize() {
                return dim;
            }
        };
        tourScroll2.add(scroll2,BorderLayout.CENTER);
        tourScroll2.setBorder(BorderFactory.createTitledBorder(empty, "Dossiers surveillés"));
        principalDroit.add(tourScroll2);
        
        
        
        JPanel boutonDroit=new JPanel(new FlowLayout());
        JButton fermer=new JButton("Fermer");
        JButton aide=new JButton("Aide");
        boutonDroit.add(fermer);
        ControleurFermerVueScanner fermeture= new ControleurFermerVueScanner(this.dialogue);
        fermer.addActionListener(fermeture);
        this.dialogue.addWindowListener(fermeture);
        boutonDroit.add(aide);
        principalDroit.add(boutonDroit);
        
        
        this.arbre.setExpandsSelectedPaths(true);
        this.arbre.setShowsRootHandles(true);
        this.arbre.setEditable(true);
        
        principal.add(principalDroit,BorderLayout.EAST);
    }
    
    public JDialog getDialog(){
        
        return this.dialogue;
    }
    
}



class ControleurArbreSelection implements TreeSelectionListener {
    
    private JTree arbre;
    private SousVueEspaceDossierRadio vue;

    public ControleurArbreSelection(JTree arbre,SousVueEspaceDossierRadio vue){
        
        this.arbre=arbre;
        this.vue=vue;
            
    }
    
    public void valueChanged(TreeSelectionEvent e) {
        
        MyDefaultMutableTreeNode node=(MyDefaultMutableTreeNode) arbre.getLastSelectedPathComponent();
       if(node!=null){
        Element el=(Element)node.getUserObject();
        vue.setModel(el);
       }
    }
    
}




class ControleurFermerVueScanner extends WindowAdapter implements ActionListener {
    
    private JDialog dialogue;
    
    public ControleurFermerVueScanner(JDialog dialogue) {
        
        this.dialogue=dialogue;

    }
    
    public void actionPerformed(ActionEvent e) {
        
        this.fermer();
    }
    
    public void windowClosing(WindowEvent e) {
        
        this.fermer();
        
    }
    
    public void fermer(){
        
        dialogue.setVisible(false);

    }
    
}




